﻿#region ... Copyright Notice ...
/*
   Copyright 2008 Tyler Jensen

	Author: Tyler Jensen    http://www.tsjensen.com/blog

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
 */
#endregion

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace Atrax.Library
{
	[DataContract, Serializable]
	public class InternetRequest
	{
		Dictionary<string, string> attributes = new Dictionary<string,string>();
		Dictionary<string, string> customHeaders = new Dictionary<string,string>();

		/// <summary>
		/// All header data of the Atrax query.
		/// </summary>
		[DataMember]
		public QueryHeader Header { get; set; }

		/// <summary>
		/// Store key value pairs that will be required in processing response data into XML result fragments.
		/// </summary>
		[DataMember]
		public Dictionary<string, string> Attributes { get { return attributes; } set { attributes = value; } }

		/// <summary>
		/// The query processor must specify the minumum number of seconds between requests from the same IP address for this type of request.
		/// </summary>
		[DataMember]
		public double PacingSecondsPerIpAddress { get; set; }

		/// <summary>
		/// The URL that will be used in the Internet request.
		/// </summary>
		[DataMember]
		public string Url { get; set; }
		
		/// <summary>
		/// The HTTP method. Currently GET and POST are accepted.
		/// </summary>
		[DataMember]
		public string Method { get; set; }
		
		/// <summary>
		/// The request content type. Optional. Only set if the request requires it.
		/// </summary>
		[DataMember]
		public string ContentType { get; set; }
		
		/// <summary>
		/// The data in key=value pairs separated by &. Must be URL encoded.
		/// </summary>
		[DataMember]
		public string PostData { get; set; }
		
		/// <summary>
		/// Key value pairs to add custom HTTP headers in the request.
		/// </summary>
		[DataMember]
		public Dictionary<string, string> CustomHeaders { get { return customHeaders; } set { customHeaders = value; } }
	}
}
